//3. 无重复字符的最长子串
class Solution2 {
    //时间复杂度 O(N)  空间复杂度O(N)
    public int lengthOfLongestSubstring(String ss) {
        //将字符串转换成字符数组
        char[] s = ss.toCharArray();

        //用数组模拟哈希表  0下标存ASCII为0的字母，1下标存ASCII为0的字母，
        //用存的值表示出现的次数，如果下标为0 的位置存的值为2，则说明ASCII码为0的的字母出现2次
        int[] hash = new int[128];
       
        int left = 0;
        int right = 0;
        int n = ss.length();
        int ret = 0;
        for(right = 0;right < n;right++){
            //进窗口
            hash[s[right]]++;
           
            //判断
            while(hash[s[right]] > 1){
                 //出窗口  把hash中的left删除 再lef后移一位
                hash[s[left++]]--;
            }

            ret = Math.max(ret,right-left+1);
        }
        return ret;
    }
}